-- *****************************************************************************
-- *                                                    *     _       _        *
-- *  AdaDecoupe                                        *    / \   __| | __ _  *
-- *  http://code.google.com/p/adadecoupe/              *   / _ \ / _` |/ _` | *
-- *  Radim Badsi & Célia Biguzzi - IG3                 *  / ___ \ (_| | (_| | *
-- *  Polytech'Montpellier                              * /_/   \_\__,_|\__,_| *
-- *                                                    *                      *
-- *****************************************************************************
-- *                                                                           *
-- * plaques_finales.ads  -  Plaques_Finales                                   *
-- * Représentation d'une plaque prête à être decoupée. Ici, on associe        *
-- * les pièces à la plaque.                                                   *
-- *                                                                           *
-- *****************************************************************************

with Util; use Util;
with SList;
with Pieces; use Pieces;


package Plaques_Finales is

	type Plaque_Finale is private;
    package Liste is new SList (Piece); use Liste;
    subtype T_Liste is Liste.T_Liste;

	function Get_Id (P : Plaque_Finale) return Natural;
	function Get_Taille (P : Plaque_Finale) return Dimension;
	function Get_Contenu (P : Plaque_Finale) return T_Liste;
	procedure Set_Contenu (P : in out Plaque_Finale; C : in T_Liste);
	function Get_Verre (P : Plaque_Finale) return Categorie_Verre;
    function Get_Surface_Utilisee (P : Plaque_Finale) return Natural;
	-- Fonction retournant la surface utilisée d'une plaque planifiée
    function Get_Surface_Chutes (P : Plaque_Finale) return Natural;
	-- Fonction retournant la surface de chute d'une plaque planifiée
    function Taux_Remplissage (P : Plaque_Finale) return Float;
	-- Fonction retournant le taux de remplissage d'une plaque planifiée
    
	function Creer (
	   Id : Natural;
	   Taille : Dimension;
	   Verre : Categorie_Verre
	   ) return Plaque_Finale;
	   
	procedure Ajouter_Contenu (P : in out Plaque_Finale; Pi : in Piece);
	-- Ajouter une pièce à une plaque
    procedure Supprimer_Contenu (P : in out Plaque_Finale; Pi : in Piece);
    -- Supprime une pièce d'une plaque
    procedure Ajouter_Surface (P : in out Plaque_Finale; Surface : in Natural);
    
	generic
		Id_Plaque : Natural;
	function Egal_Id (P : Plaque_Finale) return Boolean;

private
	type Plaque_Finale is
	record
		Id : Natural;
		Taille : Dimension;
		Verre: Categorie_Verre;
		Contenu : T_Liste;
		Surface_Utilisee : Natural;
	end record;
	
	
end Plaques_Finales;
